<!DOCTYPE html>
<html>
  <head>
    <title>Test Report</title>
    <meta charset="UTF-8">
    <style>body {    
    font-family: consolas, Verdana, sans-serif;
    font-size: .95em;
    color: #696e71;
    display: grid;
    grid-template-columns: 1fr 5rem;
}

.main_section {   
    width: 90%;
    margin: 0 auto;
}

#float_menu{    
    position:fixed;
    top:0;
    right:0;
    text-align: center;
}

#float_menu .menu-item {       
    cursor: pointer;
    padding: .5em;
    margin: .5em 0;
    color: #c08580;
    background-color: #f8f0ef;
    font-size: 1.2em;
}



.result{  
    display: flex;
}
  
  
.result_table{
    border-collapse: collapse;
    border: 1px solid #f0e0e5;
    width: 30em;
    text-align: center;
    font-size: 1.0em;
}
      
.result_table td{
    border: 1px solid #f0e0e5;
    padding: .3em;
}
  
.result_barchart{  
    width: 30em;
    margin: 0 5em 0 5em;
}
  
.barchar_item{
    margin: 2.5rem 0;
}
  
.barchart_barbox {
    margin: 0.5em 0;
    width: 100%;
    background-color: #fff;
    border: 1px solid #86c2dd;
    border-radius: .2em;
}
  
.barchart_bar {
    text-align: right;
    height: 1.2rem;
}
  
  



.h3_button {
    margin: 1.5em;
    cursor: pointer;
    color: #03a9f4;
}


.info
{
    white-space:pre-wrap;
    margin: .8em 1.5em;
}


.error-info
{
    color: #a64747
}

.suite_dir {
    margin: 1em .2em;
    padding: .3em;
    /* background-color: #dfeff6; */
    border: 1px solid #bcd8e4;
}
.suite_file {
    margin: 1em .2em;
    padding: .3em;
    border: 1px solid #bcd8e4;
}


.case {
    margin: 1em .2em;
    /* padding: .3em; */
    border: 1px solid #e7d4d4;
}

.case_class_path{
    margin: 0em 1em; 
}


.folder_header { 
    padding: .2em .7em;
    background-color: #fffaf9;
    cursor: pointer;
}


.setup{
    margin: .2em;
    /* padding: .3em; */
    /* border: 1px solid #e7d4d4; */
}
.teardown{
    margin: .2em;
    /* padding: .3em;*/
    /* border: 1px solid #e7d4d4; */
}
.test_steps{
    margin: .2em;
    padding: .3em;
    /* border: 1px solid #e7d4d4; */
}


.label {
    display: inline-block;
    padding: .1em .5em;
    font-size: .88em;
    letter-spacing: 1px;
    white-space: nowrap;
    color: #0d6ebc;
    border-radius: .2em;
    min-width: 5em;    
    margin-right: 2em;
    font-family: consolas;
}

/* .suite_setup .label{
    color: #219e26 ;
}
.suite_teardown .label{
    color: #219e26;
} */


/* .case.pass   .casename{
    color: #329132 ;
} */
.case.pass   .caselabel{
    color: white;
    background-color: #3b9e3f;
}
/* .case.fail   .casename{
    color: #a64747;
} */
.case.fail   .caselabel{
    color: white;
    background-color: #a64747;
}
/* .case.abort   .casename{
    color: #953ab7;
} */
.case.abort   .caselabel{
    color: white;
    background-color: #9c27b0;
}



.case_step  {
    margin: .8em;
}
.checkpoint_pass {
    margin: .8em;
}
.checkpoint_fail {
    margin: .8em;
}

.case_step  .tag{
    color: #2196f3;;
    margin: .3em 1em .3em 0;
    padding: .1em .3em;
    font-size: .92em;
}

.checkpoint_pass .tag{
    color: #009806;
    margin:.3em 1em .3em .5em;
    padding: .1em .3em;
    font-size: .92em;
}
.checkpoint_fail .tag{
    color: #9c2020;
    margin:.3em 1em .3em .5em;
    padding: .1em .3em;
    font-size: .92em;
}

.screenshot {
    border: 1px solid #86c2dd;
}

.executetime {
    float: right;
}</style>
    <script type="text/javascript">var FOLDER_ALL_CASES = false //是否为精简模式的标记
var ERROR_INFOS = [];  // 错误信息列表
var current_error_idx = -1;

// 页面加载后执行的函数
window.addEventListener("load", function(){
    // 所有 .folder_header 添加点击事件处理
    let folderHeaderEles = document.querySelectorAll(".folder_header");
    folderHeaderEles.forEach(function(ele) {
        ele.addEventListener("click", function(event) {
        let fb = event.target.closest('.folder_header').nextElementSibling;
        fb.style.display = fb.style.display === 'none' ? 'block' : 'none'
        });
    });

    // 找到所有的错误信息对象
    ERROR_INFOS = document.querySelectorAll(".error-info");
});



function toggle_folder_all_cases(){
    let eles = document.querySelectorAll(".folder_body");
    
    FOLDER_ALL_CASES = !FOLDER_ALL_CASES;
    document.getElementById('display_mode').innerHTML = FOLDER_ALL_CASES? "Detail" : "Summary"

    for (const ele of eles){
        ele.style.display =  FOLDER_ALL_CASES? "none": "block"
    }
    
}



function previous_error(){
    // 查找错误必须是详细模式
    if (FOLDER_ALL_CASES)
        toggle_folder_all_cases()

    current_error_idx -= 1; 
    if (current_error_idx<0)
        current_error_idx = 0

    
    let error = ERROR_INFOS[current_error_idx];

    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});

    
}


function next_error(){
    
    // 查找错误必须是详细模式
    if (FOLDER_ALL_CASES)
        toggle_folder_all_cases()

    current_error_idx += 1;
    if (current_error_idx > ERROR_INFOS.length-1)
        current_error_idx = ERROR_INFOS.length-1

    let error = ERROR_INFOS[current_error_idx];

    error.scrollIntoView({behavior: "smooth", block: "center", inline: "start"});
    
}</script>
  </head>
  <body>
    <div class="main_section">
      <h1 style="font-family: auto">Test Report</h1>
      <h3>Test Statistics</h3>
      <div class="result">
        <table class="result_table">
          <tbody>
            <tr>
              <td>hytest version</td>
              <td>0.8.12</td>
            </tr>
            <tr>
              <td>Test Start Time</td>
              <td>2025/06/27 18:06:22</td>
            </tr>
            <tr>
              <td>Test End Time</td>
              <td>2025/06/27 18:06:54</td>
            </tr>
            <tr>
              <td>Duration Of Testing</td>
              <td>31.492 Seconds</td>
            </tr>
            <tr>
              <td>number of cases plan to run</td>
              <td>1</td>
            </tr>
            <tr>
              <td>number of cases actually run</td>
              <td>1</td>
            </tr>
            <tr>
              <td>passed</td>
              <td>0</td>
            </tr>
            <tr>
              <td>failed</td>
              <td style="">0</td>
            </tr>
            <tr>
              <td>exception aborted</td>
              <td style="color:red">1</td>
            </tr>
            <tr>
              <td>blocked</td>
              <td style="">0</td>
            </tr>
            <tr>
              <td>suite setup failed</td>
              <td style="">0</td>
            </tr>
            <tr>
              <td>suite teardown failed</td>
              <td style="">0</td>
            </tr>
            <tr>
              <td>cases setup failed</td>
              <td style="">0</td>
            </tr>
            <tr>
              <td>cases teardown failed</td>
              <td style="">0</td>
            </tr>
          </tbody>
        </table>
        <div class="result_barchart">
          <div class="barchar_item">
            <span>cases passed 0% ： 0 </span>
            <div class="barchart_barbox">
              <div class="barchart_bar" style="width: 0.0%; background-color: #04AA6D;"></div>
            </div>
          </div>
          <div class="barchar_item">
            <span>cases failed 0% ： 0 </span>
            <div class="barchart_barbox">
              <div class="barchart_bar" style="width: 0.0%; background-color: #bb4069;"></div>
            </div>
          </div>
          <div class="barchar_item">
            <span>cases exception aborted 100% ： 1 </span>
            <div class="barchart_barbox">
              <div class="barchart_bar" style="width: 100.0%; background-color: #9c27b0;"></div>
            </div>
          </div>
          <div class="barchar_item">
            <span>cases blocked 0% ： 0 </span>
            <div class="barchart_barbox">
              <div class="barchart_bar" style="width: 0.0%; background-color: #dcbdbd;"></div>
            </div>
          </div>
        </div>
      </div>
      <div style="margin-top:2em">
        <h3 style="display:inline">Test Execution Log</h3>
      </div>
      <div class="exec_log">
        <div class="suite_dir" id="suite_dir cases/">
          <div>
            <span class="label">Enter Folder</span>
            <span>cases/</span>
          </div>
          <div class="suite_setup setup" id="suite_setup setup cases/">
            <div class="folder_header">
              <span class="label">Suite Setup</span>
              <span>cases/</span>
              <span class="executetime">2025-06-27 18:06:22</span>
            </div>
            <div class="folder_body"></div>
          </div>
        </div>
        <div class="suite_dir" id="suite_dir cases/七一班/">
          <div>
            <span class="label">Enter Folder</span>
            <span>cases/七一班/</span>
          </div>
          <div class="suite_setup setup" id="suite_setup setup cases/七一班/">
            <div class="folder_header">
              <span class="label">Suite Setup</span>
              <span>cases/七一班/</span>
              <span class="executetime">2025-06-27 18:06:23</span>
            </div>
            <div class="folder_body">
              <div class="info">{'invitecode': '203906657866', 'retcode': 0, 'id': 20390}</div>
            </div>
          </div>
        </div>
        <div class="suite_dir" id="suite_dir cases/七一班/安老师-数学老师/">
          <div>
            <span class="label">Enter Folder</span>
            <span>cases/七一班/安老师-数学老师/</span>
          </div>
          <div class="suite_setup setup" id="suite_setup setup cases/七一班/安老师-数学老师/">
            <div class="folder_header">
              <span class="label">Suite Setup</span>
              <span>cases/七一班/安老师-数学老师/</span>
              <span class="executetime">2025-06-27 18:06:23</span>
            </div>
            <div class="folder_body"></div>
          </div>
        </div>
        <div class="suite_dir" id="suite_dir cases/七一班/安老师-数学老师/大学生/">
          <div>
            <span class="label">Enter Folder</span>
            <span>cases/七一班/安老师-数学老师/大学生/</span>
          </div>
          <div class="suite_setup setup" id="suite_setup setup cases/七一班/安老师-数学老师/大学生/">
            <div class="folder_header">
              <span class="label">Suite Setup</span>
              <span>cases/七一班/安老师-数学老师/大学生/</span>
              <span class="executetime">2025-06-27 18:06:23</span>
            </div>
            <div class="folder_body"></div>
          </div>
        </div>
        <div class="suite_file" id="suite_file cases/七一班/安老师-数学老师/大学生/teacher_web_cases.py">
          <div>
            <span class="label">Enter File</span>
            <span>cases/七一班/安老师-数学老师/大学生/teacher_web_cases.py</span>
          </div>
          <div class="case abort" id="case_00000001">
            <div class="folder_header">
              <span class="label caselabel">Case ABORT</span>
              <span class="casename">老师发布作业2 - tc005102</span>
              <span class="executetime">2025-06-27 18:06:23</span>
            </div>
            <div class="folder_body">
              <span class="case_class_path">cases/七一班/安老师-数学老师/大学生/teacher_web_cases.py::TeacherWeb4</span>
              <div class="test_steps" id="test_steps 老师发布作业2 - tc005102">
                <span class="label">Test Steps</span>
                <div class="case_step">
                  <span class="tag">Step #1</span>
                  <span>数学老师登录</span>
                </div>
                <div class="case_step">
                  <span class="tag">Step #2</span>
                  <span>发布作业-作业名为空字符串</span>
                </div>
                <div class="info error-info">Message: element not interactable
  (Session info: chrome=137.0.7151.120)
Stacktrace:
0   chromedriver                        0x00000001006d03bc cxxbridge1$str$ptr + 2829900
1   chromedriver                        0x00000001006c8684 cxxbridge1$str$ptr + 2797844
2   chromedriver                        0x0000000100205e30 cxxbridge1$string$len + 89744
3   chromedriver                        0x000000010024e1e0 cxxbridge1$string$len + 385600
4   chromedriver                        0x0000000100242f14 cxxbridge1$string$len + 339828
5   chromedriver                        0x00000001002429a0 cxxbridge1$string$len + 338432
6   chromedriver                        0x000000010028e044 cxxbridge1$string$len + 647332
7   chromedriver                        0x00000001002413f8 cxxbridge1$string$len + 332888
8   chromedriver                        0x00000001006947e0 cxxbridge1$str$ptr + 2585200
9   chromedriver                        0x0000000100697ab0 cxxbridge1$str$ptr + 2598208
10  chromedriver                        0x0000000100675db4 cxxbridge1$str$ptr + 2459716
11  chromedriver                        0x0000000100698328 cxxbridge1$str$ptr + 2600376
12  chromedriver                        0x0000000100667640 cxxbridge1$str$ptr + 2400464
13  chromedriver                        0x00000001006b828c cxxbridge1$str$ptr + 2731292
14  chromedriver                        0x00000001006b8418 cxxbridge1$str$ptr + 2731688
15  chromedriver                        0x00000001006c82d0 cxxbridge1$str$ptr + 2796896
16  libsystem_pthread.dylib             0x000000018dbf6c0c _pthread_start + 136
17  libsystem_pthread.dylib             0x000000018dbf1b80 thread_start + 8
 
Traceback:
  File &quot;cases/七一班/安老师-数学老师/大学生/teacher_web_cases.py&quot;, line 53, in teststeps
    homeworkName = top.getAddHomewordInfo()
  File &quot;/Users/sunlei/Desktop/测试开发实战班/自动化测试/亿教亿学项目/lib/webui/TeacherOp.py&quot;, line 168, in getAddHomewordInfo
    self.wd.find_element(By.CSS_SELECTOR, 'a[href=&quot;#/exam_search&quot;] .submenu-title').click()
  File &quot;/Users/sunlei/Desktop/测试开发实战班/自动化测试/亿教亿学项目/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py&quot;, line 94, in click
    self._execute(Command.CLICK_ELEMENT)
  File &quot;/Users/sunlei/Desktop/测试开发实战班/自动化测试/亿教亿学项目/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webelement.py&quot;, line 395, in _execute
    return self._parent.execute(command, params)
  File &quot;/Users/sunlei/Desktop/测试开发实战班/自动化测试/亿教亿学项目/venv/lib/python3.8/site-packages/selenium/webdriver/remote/webdriver.py&quot;, line 384, in execute
    self.error_handler.check_response(response)
  File &quot;/Users/sunlei/Desktop/测试开发实战班/自动化测试/亿教亿学项目/venv/lib/python3.8/site-packages/selenium/webdriver/remote/errorhandler.py&quot;, line 232, in check_response
    raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
  (Session info: chrome=137.0.7151.120)
Stacktrace:
0   chromedriver                        0x00000001006d03bc cxxbridge1$str$ptr + 2829900
1   chromedriver                        0x00000001006c8684 cxxbridge1$str$ptr + 2797844
2   chromedriver                        0x0000000100205e30 cxxbridge1$string$len + 89744
3   chromedriver                        0x000000010024e1e0 cxxbridge1$string$len + 385600
4   chromedriver                        0x0000000100242f14 cxxbridge1$string$len + 339828
5   chromedriver                        0x00000001002429a0 cxxbridge1$string$len + 338432
6   chromedriver                        0x000000010028e044 cxxbridge1$string$len + 647332
7   chromedriver                        0x00000001002413f8 cxxbridge1$string$len + 332888
8   chromedriver                        0x00000001006947e0 cxxbridge1$str$ptr + 2585200
9   chromedriver                        0x0000000100697ab0 cxxbridge1$str$ptr + 2598208
10  chromedriver                        0x0000000100675db4 cxxbridge1$str$ptr + 2459716
11  chromedriver                        0x0000000100698328 cxxbridge1$str$ptr + 2600376
12  chromedriver                        0x0000000100667640 cxxbridge1$str$ptr + 2400464
13  chromedriver                        0x00000001006b828c cxxbridge1$str$ptr + 2731292
14  chromedriver                        0x00000001006b8418 cxxbridge1$str$ptr + 2731688
15  chromedriver                        0x00000001006c82d0 cxxbridge1$str$ptr + 2796896
16  libsystem_pthread.dylib             0x000000018dbf6c0c _pthread_start + 136
17  libsystem_pthread.dylib             0x000000018dbf1b80 thread_start + 8

</div>
              </div>
            </div>
          </div>
          <div class="suite_teardown teardown" id="suite_teardown teardown cases/七一班/安老师-数学老师/大学生/">
            <div class="folder_header">
              <span class="label">Suite Teardown</span>
              <span>cases/七一班/安老师-数学老师/大学生/</span>
              <span class="executetime">2025-06-27 18:06:53</span>
            </div>
            <div class="folder_body"></div>
          </div>
          <div class="suite_teardown teardown" id="suite_teardown teardown cases/七一班/安老师-数学老师/">
            <div class="folder_header">
              <span class="label">Suite Teardown</span>
              <span>cases/七一班/安老师-数学老师/</span>
              <span class="executetime">2025-06-27 18:06:53</span>
            </div>
            <div class="folder_body"></div>
          </div>
          <div class="suite_teardown teardown" id="suite_teardown teardown cases/七一班/">
            <div class="folder_header">
              <span class="label">Suite Teardown</span>
              <span>cases/七一班/</span>
              <span class="executetime">2025-06-27 18:06:54</span>
            </div>
            <div class="folder_body"></div>
          </div>
        </div>
      </div>
    </div>
    <div id="float_menu">
      <div class="menu-item" onclick="document.querySelector(&quot;body&quot;).scrollIntoView()">Home</div>
      <div class="menu-item" onclick="window.open(&quot;https://github.com/jcyrss/hytest/Documentation.md&quot;, &quot;_blank&quot;); ">Help</div>
      <div class="menu-item" id="display_mode" onclick="toggle_folder_all_cases()">Summary</div>
      <div class="error_jumper" display="block">
        <div class="menu-item" onclick="previous_error()" title="上一个错误">∧</div>
        <div class="menu-item" onclick="next_error()" title="下一个错误">∨</div>
      </div>
    </div>
  </body>
</html>